// 数据库操作
const mongoose = require('mongoose');
// 模型规则类
const {
    Schema
} = mongoose;

// 对象规则验证
const Joi = require('joi');
// 床模型规则
const bedTypeSchema = new Schema({
    // 床名称
    title: {
        type: String,
        required: [true, '床名称不能为空'],
        unique: [true, '床名称已存在'],
        minlength: 2,
        maxlength: 10
    },
    // 床长度
    length: {
        type: Number,
        default: 2,
        min: 0
    },
    // 床宽度
    width: {
        type: Number,
        default: 1.2,
        min: 0
    },
    // 床高度
    heigth: {
        type: Number,
        default: 0.4,
        min: 0
    },
    maxOccupancy: {
        type: Number,
        required: true,
        default: 1,
        min: 1,
        max: 8
    }
}, {
    versionKey: false
});

const BedType = mongoose.model('BedType', bedTypeSchema);

// 床格式校验
const validataBedType = bedType => {
    // 定义对象验证规则
    const schema = {
        title: Joi.string().regex(/^[\u4e00-\u9fa5]{2,10}$/).required().error(new Error("[房间号]格式错误，仅可包含中文汉字，长度为2~10位")),
        length: Joi.number().min(0).error(new Error("长度必须大于0，单位为米")),
        width: Joi.number().min(0).error(new Error("宽度必须大于0，单位为米")),
        height: Joi.number().min(0).error(new Error("高度必须大于0，单位为米")),
        maxOccupancy: Joi.number().min(1).max(8).required().error(new Error("最大可住人数不能为空，取值范围为1~8"))
    };
    // 验证
    return Joi.validate(bedType, schema, {
        // 检测到所有错误
        abortEarly: false,
        // 允许对象包含被忽略的未知键
        allowUnknown: true
    });
}

// 导出模块成员
module.exports = {
    BedType,
    validataBedType
}